1
2
3
4
5
6 package com.codepoetics.protonpack;
7
8 import static org.junit.Assert.assertEquals;
9 import static org.junit.Assert.assertTrue;
10
11 import java.util.Arrays;
12 import java.util.List;
13 import java.util.Map;
14
15 import com.codepoetics.protonpack.maps.MapStream;
16 import org.junit.Before;
17 import org.junit.Test;
18
19 public class MapStreamTest {
20
21 private MapStream<String, Integer> mapStream;
22
23 @Before
24 public void setUp() {
25 mapStream = MapStream.of("John", 1, "Alice", 2);
26 }
27
28 @Test
29 public void testMapKeys() {
30 Map<String, Integer> map = mapStream.mapKeys(x -> x.substring(2)).collect();
31 assertTrue(map.containsKey("hn"));
32 assertEquals(Integer.valueOf(1), map.get("hn"));
33 }
34
35 @Test
36 public void testMapValues() {
37 Map<String, Integer> map = mapStream.mapValues(x -> x + 5).collect();
38 assertEquals(Integer.valueOf(6), map.get("John"));
39 }
40
41 @Test
42 public void testMapEntries() {
43 Map<String, Integer> map = mapStream.mapEntries(x -> x.concat(" Doe"), i -> i%2).collect();
44 assertEquals(Integer.valueOf(1), map.get("John Doe"));
45 assertEquals(Integer.valueOf(0), map.get("Alice Doe"));
46 }
47
48 @Test(expected = IllegalStateException.class)
49 public void testFailMergeKeys() {
50 mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).collect();
51 }
52
53 @Test
54 public void testMergeKeys() {
55 Map<Boolean, List<Integer>> map = mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).mergeKeys().collect();
56 assertEquals(Arrays.asList(1, 2), map.get(true));
57 assertEquals(null, map.get(false));
58 }
59
60 @Test
61 public void testMergeKeysWithBinaryFunction() {
62 Map<Boolean, Integer> map = mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).mergeKeys(Integer::sum).collect();
63 assertEquals(Integer.valueOf(3), map.get(true));
64 assertEquals(null, map.get(false));
65 }
66
67 @Test
68 public void testReverseMapping() {
69 Map<Integer, String> map = mapStream.inverseMapping().collect();
70 assertEquals("John", map.get(1));
71 assertEquals("Alice", map.get(2));
72
73 map.put(3, "John");
74
75 Map<String, Integer> mapReversed = MapStream.of(map).inverseMapping().collect(Integer::sum);
76 assertEquals(Integer.valueOf(4), mapReversed.get("John"));
77 assertEquals(Integer.valueOf(2), mapReversed.get("Alice"));
78 }
79 }